/*****************************************************************************/
/*                        >>> FUNC_consola.c -- <<<                          */
/*	Trabajo Practico 2do. cuatrimestre 2011                                  */
/*	TP:"FUSELAJE"                                                            */
/*	GRUPO: Reduce Fat Fast                                                   */
/*	INTEGRANTES: Emanuel Genovese                                            */
/*               Federico Gabriel Garcia                                     */
/*               Federico Pioli                                              */
/*               Esther Insfrain                                             */
/*               Luciano Bagattin                                            */
/*	Fecha UM:                                                                */
/*****************************************************************************/
/*****************************************************************************/
/*		        	Include					                                 */
/*****************************************************************************/
#include <string.h>
#include <sys/select.h>
#include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>
#include "../headers/constantes.h"
#include "../headers/structs_consola.h"
#include "../headers/func_PCNIPC.h"
#include "log.h"
#include "func_strings.h"
#include "constants_commons.h"


/******************************************************************************/
/* Nombre de Funcion: fAtenderPosicionCabezal                                 */
/* Parametros: socket: socket por el cual se comunica                         */
/*               log: archivo de log                                          */
/* Descripcion: Funcion que envia al Ppd la posicion del cabezal              */
/******************************************************************************/
int fAtenderPosicionCabezal(int iSocket, int * iPosicion,t_log *log){
/*declaracion de variables locales*/
	stNIPC st, str;
	int iResultado=-1;
/*fin de la declaracion variables locales*/

	st.iPayloadDescriptor=POSICIONCABEZAL;
	st.iType=1;
	st.sPayload_lenth=0;
	strcpy(st.sDescriptorOriginal, "NULL");
	st.sPayload=NULL;
	printf("%d",iSocket);
	if(fSendIPCCXsocket(iSocket, st, log)==0){
		log_error(log, NOMBREPROCESO, "Message error: %s", "Error en el envio de mensajes");
		return 1;
	}
	log_info(log, NOMBREPROCESO, "Message info: %s", "Exito en el envio de mensajes");


	/*Procedemos a esperar el pedido*/


		if(!fRecvIPCCXsocket(iSocket, &str, log)){
		 return 1;

		}//fin del if
     	iResultado=0;
     	iPosicion=(int*)str.sPayload;


return iResultado;
}//find el fAtenderPosicionCabezal

/******************************************************************************/
/* Nombre de Funcion: fAtenderClean                                           */
/* Parametros: iSocket: socket por el cual se comunica                        */
/*               sectorDesde: sector por el cual va a empezar a borrar        */
/*               sectorHasta: sector por el cual va a terminar de borrar      */
/*               inclusive                                                    */
/*             log: archivo log                                               */
/* Descripcion: Funcion que envia el pedido al ppd para limpiar sectores      */
/******************************************************************************/

int fAtenderClean(int iSocket, int sectorDesde, int sectorHasta, char * sectoresBorrados, char * sectoresNoBorrados,int *iCantSectoresBorrados, int *iCantSectoresNoBorrados,t_log *log){
	/*declaracion de variables locales*/
	    stNIPC st, str;
		int i,iResultado,iCantSectores=0,iResp;
		stPEscrituraSector stIPC;

		char sSector[10];



	/*fin de la declaracion variables locales*/
	 st.iPayloadDescriptor=ESCRITURA;
	 st.iType=2;

	 st.sPayload_lenth=0;
	 sprintf(sectoresBorrados, "%s", "");
	 sprintf(sectoresNoBorrados, "%s", "");
	 strcpy(st.sDescriptorOriginal, "NULL");
	  memset(stIPC.info, '\0', 512);
	 iCantSectores=sectorHasta-sectorDesde;
	 for(i=sectorDesde;i<=sectorHasta;i++){
         stIPC.iSector=i;
         st.sPayload=&stIPC;
         if(!fSendIPCCXsocket(iSocket, st, log)){
         			return 1;
         } //fin del if

        if(!fRecvIPCCXsocket(iSocket, &str, log)){
     		iResp=1;

        }//fin del if
     	iResultado=(int)str.sPayload;
     	/*Verifico si la operacion salio ok*/
     	if(iResultado == OPERACION_OK){
            iCantSectoresBorrados++;
            pIntacad(i,sSector);
            strcat(sectoresBorrados, sSector);
            strcat(sectoresBorrados, ",");
     	}else{
     		iCantSectoresNoBorrados++;
     		pIntacad(i,sSector);
     		strcat(sectoresBorrados, sSector);
     		strcat(sectoresBorrados, ",");
     	}
	 }







return iResp;
}//fin del fAtenderClean

/******************************************************************************/
/* Nombre de Funcion: fAtenderTrace                                           */
/* Parametros: iSocket: socket de comunicacion con el PPD.                    */
/*             sectores:sectores a Tracear no deben ser mas de 5              */
/* Descripcion: Funcion atiende el trace                                      */
/******************************************************************************/
int fAtenderTrace(int iSocket, char * sectores, t_log *log){
	/*declaracion de variables locales*/
	    stNIPC st;
        int vTrace[5],i, iCant;
        stNIPC str;

	/*fin de la declaracion variables locales*/
	st.iPayloadDescriptor=LECTURA;
	st.iType=3;
	st.sPayload_lenth=sizeof(short int);
	/*PasarSectores a vectSocketres*/
	pConvierteSectores(sectores,vTrace, &iCant);

	strcpy(st.sDescriptorOriginal, "NULL");
	for(i=0; i <= iCant;i++){
		st.sPayload=&vTrace[i];
		if(!fSendIPCCXsocket(iSocket, st, log)){
			return 1;
		} //fin del if

		st.sPayload=&vTrace[i];

		if(!fRecvIPCCXsocket(iSocket, &str,log)){
		  return 1;
		}//fin del if

	}//fin del for


	return 0;
}//fin del fAtenderTrace
